<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class fornecedor extends CI_Controller {
    private $sessao = "";

    function __construct(){
        parent::__construct();
        $this->load->model("FornecedorModel");
        $this->load->model("Log");

        $this->load->helper("auth");
        $this->sessao = a_logado();
       
    }

    public function index($mensagem = ""){
        $this->load->helper("html");
        $fornecedores = $this->FornecedorModel->listar();

        if( $fornecedores->num_rows() > 0 ) :
            $pedido = array('src'=>"images/tabelas/pedido.png", 'height' => '26px', "style" => "border:0;");
            $produto = array('src'=>"images/tabelas/produto.png", 'height' => '26px', "style" => "border:0;");
            $lista = "";
            $linha = 0;
            foreach( $fornecedores->result() as $fornecedor ) :
                if ($linha == 0)
                    $lista .= "<tr class=\"impar\">\n\t\t";
                else
                    $lista .= "<tr>\n\t\t";
                $lista .= "<td><input type=\"checkbox\" name=\"fornecedor_$fornecedor->idFornecedor\" /></td>\n\t\t";
                $lista .= "<td>". anchor("admin/fornecedor/editar/".$fornecedor->idFornecedor, $fornecedor->razaoSocial)."</td>\n\t\t";
                $lista .= "<td>$fornecedor->nome $fornecedor->sobrenome</td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/produto/fornecedor/".$fornecedor->idFornecedor, img($produto))."</center></td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/pedido/fornecedor/".$fornecedor->idFornecedor, img($pedido))."</center></td>\n\t\t";
                if($fornecedor->autorizado == true)
                    $lista .= "<td><center>Sim</center></td>\n";
                else
                    $lista .= "<td><center>Não</center></td>\n";

                $lista .= "</tr>\n\t";

                if ($linha == 0 ) $linha = 1;
                else $linha = 0;
            endforeach;

        else :
            $lista = "<tr>\n\t";
            $lista .= "<td colspan=\"4\">Nenhum fornecedor cadastrado.</td><td><td>\n";
            $lista .= "</tr>\n";
        endif;

        if($mensagem != "") $mensagem = "\nOperação realizada com Sucesso!\n";
        $dados = array(
            "titulo" => "Gerenciamento de Fornecedores",
            "user" => $this->sessao->nome,
            "lista" => $lista,
            "mensagem" => $mensagem
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/listar_fornecedor_view",
            "menu" => "admin"
            );

        $this->load->view("template", $main);

    }

    public function gerar_link_cadastro($email = ""){
        $this->load->helper("mail");
        if($email == "") show_404 ();
        else{
            $email = str_replace("z-z", "@", $email);
            $email = str_replace("x-x", ".", $email);
            //echo $email;
            emailLinkCadastroFornecedor($email, criptografar());
        }
        redirect("admin/fornecedor/index/sucesso");
       // header("http://www.comprasdaconstrucao.com.br/admin/fornecedor/index/sucesso");
    }

    public function gerar_link_cadastro_input(){
        $this->load->helper("form");
        $this->load->helper("mail");
        $this->load->library("form_validation");
       // print_r($this->input->post());

         $dados = array(
            "titulo" => "Gerar link de cadastro",
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/gerar_link_fornecedor_view",
            "menu" => "fornecedor"
            );
        
         $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|callback_email_check');
         
         if ($this->form_validation->run() == false)
            $this->load->view('template', $main);
         else{
            emailLinkCadastroFornecedor($this->input->post("email"), criptografar());
            redirect("admin/fornecedor/index/sucesso");
         }
         
    }

    public function cadastrar(){
        
        $this->load->helper("form");
        $this->load->library("form_validation");

        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                $estados .= "<option value=\"$estado->abrev_uf\" ". set_select("estado", $estado->abrev_uf). ">$estado->nm_uf</option>\n";
            endforeach;

        endif;

        $dados = array(
            "titulo" => "Cadastro de Fornecedores",
            "estados" => $estados,
            "erro" => ""
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/cad_fornecedor_view",
            );

        //Validação dos campos
        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[4]');
        $this->form_validation->set_rules('sobrenome', 'Sobrenome', 'required|min_length[4]');
        $this->form_validation->set_rules('razaoSocial', 'Raz&atilde;o Social', 'required');
        $this->form_validation->set_rules('cnpj', 'CNPJ', 'required|numeric|callback_cnpj_check');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|callback_email_check');
        $this->form_validation->set_rules('website', 'Website');
        $this->form_validation->set_rules('pais', 'Pa&iacute;s', 'required');
        $this->form_validation->set_rules('cidade', 'Cidade', 'required');
        $this->form_validation->set_rules('estado', 'Estado', 'required');
        $this->form_validation->set_rules('senha', 'Senha', 'required|md5');
        $this->form_validation->set_rules('senha2', 'Confirmar senha', 'required|matches[senha]');
        $this->form_validation->set_rules('telefone', 'Telefone', 'required');
        $this->form_validation->set_rules('endereco', 'Endereco', 'required');
        $this->form_validation->set_rules('numero', 'Numero', 'required');
        $this->form_validation->set_rules('complemento', 'Complemento');
        $this->form_validation->set_rules('cep', 'CEP', 'required|min_lenght[8]');


        if ($this->form_validation->run() == false) :
            $this->load->view('template', $main);

        else :
            $dir = './fotos/fornecedor/';
            $config['upload_path'] = $dir;
            $config['allowed_types'] = 'gif|jpg|png';
            $config['file_name'] = "arquivo_novo";
            $config['overwrite'] = "TRUE";
            $config['max_size']	= '1000';
            $config['max_width']  = '1024';
            $config['max_height']  = '768';

            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            $this->upload->do_upload();
            if( strstr("Você não selecionou um arquivo para envio", $this->upload->display_errors())){
                $dados['erro'] = $this->upload->display_errors();
                $main['dados'] = $dados;
                $this->load->view('template', $main);
            }
            else{

                $campos = array(
                    "nome" => $this->input->post("nome"),
                    "sobrenome" => $this->input->post("sobrenome"),
                    "razaoSocial" => $this->input->post("razaoSocial"),
                    "cnpj" => $this->input->post("cnpj"),
                    "email" => $this->input->post("email"),
                    "website" => $this->input->post("website"),
                    "telefone" => $this->input->post("telefone"),
                    "pais" => $this->input->post("pais"),
                    "cidade" => $this->input->post("cidade"),
                    "estado" => $this->input->post("estado"),
                    "fax" => $this->input->post("fax"),
                    "celular" => $this->input->post("celular"),
                    "senha" => $this->input->post("senha"),
                    "endereco" => $this->input->post("endereco"),
                    "numero" => $this->input->post("numero"),
                    "cep" => $this->input->post("cep"),
                    "complemento" => $this->input->post("complemento"),
                    "dataCadastro" => timestamp()
                );
                
                $idInserido = $this->FornecedorModel->inserir($campos);
                $data_file = $this->upload->data();
                rename("fotos/fornecedor/arquivo_novo".$data_file['file_ext'], "fotos/fornecedor/$idInserido".$data_file['file_ext']);

                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "cadastrou", "fornecedor", $idInserido);
                redirect("admin/fornecedor/index/sucesso");
                }
        //edirect("admin/fornecedor");
        endif;

    }

    public function editar($id = ""){

        if ($id == "") show_error("Parametro faltando!");//redirect("erro/index/");
        $this->load->helper("form");
        $this->load->library("form_validation");

        $fornecedor = $this->FornecedorModel->getFornecedor($id);
        if ($fornecedor == false) show_error("Fornecedor não existente");
        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                if( $estado->abrev_uf == $fornecedor->estado ):
                    $estados .= "<option value=\"$estado->abrev_uf\" selected=\"selected\">$estado->nm_uf</option>\n";

                else :
                    $estados .= "<option value=\"$estado->abrev_uf\">$estado->nm_uf</option>\n";

                endif;

            endforeach;
            
        endif;

        $local = foto_fornecedor_local($id);
        $dados = array(
            "titulo" => "Edi&ccedil;&atilde;o de Fornecedores",
            "user" => $this->sessao->nome,
            "fornecedor" => $fornecedor,
            "estados" => $estados,
            "foto" => foto_fornecedor($id),
            "erro" => ""
            );
        $main = array(
            "dados" => $dados,
            "link" => "admin/edit_fornecedor_view"
            );


        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[4]');
        $this->form_validation->set_rules('sobrenome', 'Sobrenome', 'required|min_length[4]');
        $this->form_validation->set_rules('razaosocial', 'Raz&atilde;o Social', 'required');
        $this->form_validation->set_rules('cnpj', 'CNPJ', 'required|callback_cnpj_check|callback_cnpj_validacao');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
        $this->form_validation->set_rules('website', 'Website');
        $this->form_validation->set_rules('telefone', 'Telefone', 'required');
        $this->form_validation->set_rules('pais', 'Pa&iacute;s', 'required');
        $this->form_validation->set_rules('cidade', 'Cidade', 'required');
        $this->form_validation->set_rules('estado', 'Estado', 'required');
        $this->form_validation->set_rules('senha', 'Senha', 'md5');
        $this->form_validation->set_rules('senha2', 'Confirmar senha', 'matches[senha]');
        $this->form_validation->set_rules('endereco', 'Endereco', 'required');
        $this->form_validation->set_rules('numero', 'Numero', 'required');
        $this->form_validation->set_rules('complemento', 'Complemento');
        $this->form_validation->set_rules('cep', 'CEP', 'required|min_lenght[8]');

        if ($this->form_validation->run() == false) :
            $this->load->view('template', $main);

        else :

            $dir = './fotos/fornecedor/';
            $config['upload_path'] = $dir;
            $config['allowed_types'] = 'gif|jpg|png';
            $config['file_name'] = "arquivo_novo";
            $config['max_size']	= '1000';
            $config['max_width']  = '1024';
            $config['max_height']  = '768';

            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            $this->upload->do_upload();
            if( strstr("Você não selecionou um arquivo para envio", $this->upload->display_errors())){
                $dados['erro'] = $this->upload->display_errors();
                $main['dados'] = $dados;
                $this->load->view('template', $main);
            }
            else{
                $campos = array(
                    "nome" => $this->input->post("nome"),
                    "sobrenome" => $this->input->post("sobrenome"),
                    "razaoSocial" => $this->input->post("razaosocial"),
                    "cnpj" => $this->input->post("cnpj"),
                    "email" => $this->input->post("email"),
                    "website" => $this->input->post("website"),
                    "telefone" => $this->input->post("telefone"),
                    "pais" => $this->input->post("pais"),
                    "cidade" => $this->input->post("cidade"),
                    "estado" => $this->input->post("estado"),
                    "fax" => $this->input->post("fax"),
                    "celular" => $this->input->post("celular"),
                    "endereco" => $this->input->post("endereco"),
                    "numero" => $this->input->post("numero"),
                    "cep" => $this->input->post("cep"),
                    "complemento" => $this->input->post("complemento")
                );
                if($this->input->post("senha") != "")
                    $campos['senha'] = $this->input->post("senha");

                $this->FornecedorModel->update($id, $campos);

                $data_file = $this->upload->data();

                if($data_file["is_image"] != "" && $local != false){
                    print_r($this->upload->data());
                    unlink($local);
                }
                $data_file = $this->upload->data();
                rename("fotos/fornecedor/arquivo_novo".$data_file['file_ext'], "fotos/fornecedor/$id".$data_file['file_ext']);

                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "cadastrou", "fornecedor", $idInserido);
                redirect("admin/fornecedor/index/sucesso");
            }
        endif;
    }
/*
    public function delete(){

        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é fornecedor
            if($nome[0] == "fornecedor") :
                $this->FornecedorModel->delete( $nome[1] );

            endif;

        endforeach;

        redirect("admin/fornecedor/index/sucesso");
    }
 * 
 */
    public function gerenciar(){
        //print_r($this->input->post());
        if($this->input->post("deletar_x")) :
                $this->delete();
        elseif($this->input->post("autorizar_x")) :
                $this->autorizar();
        elseif($this->input->post("desautorizar_x")) :
                $this->desautorizar();
        endif;
    }

    private function delete(){
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é fornecedor
            if($nome[0] == "fornecedor") :
                $this->FornecedorModel->delete( $nome[1] );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "deletou", "fornecedor", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        
        redirect("admin/fornecedor/index/sucesso");

    }

    private function autorizar(){
        //print_r($this->input->post());
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é fornecedor
            if($nome[0] == "fornecedor") :
                $vetor = array( "autorizado" => 1);
                $this->FornecedorModel->update($nome[1],$vetor );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "autorizou", "fornecedor", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        redirect("admin/fornecedor/index/sucesso");
    }

    private function desautorizar(){
        //print_r($this->input->post());
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é produto
            if($nome[0] == "fornecedor") :
                $vetor = array( "autorizado" => 0);
                $this->FornecedorModel->update($nome[1],$vetor );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "desautorizou", "fornecedor", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        redirect("admin/fornecedor/index/sucesso");
    }

    function email_check($str){
        if ($this->FornecedorModel->getFornecedorEmail($str) != false) :
            $this->form_validation->set_message('email_check', 'Já há um cadastro com este e-mail.');
            return FALSE;

        else :
            return TRUE;

        endif;
    }

    function cnpj_check($str){
        $fornecedor = $this->FornecedorModel->getFornecedorCnpj($str);
        if ($fornecedor != false) {
            if($fornecedor->cnpj == $str)
                return TRUE;
            else{
                $this->form_validation->set_message('cnpj_check', 'Já há um cadastro com este CNPJ.');
                return FALSE;
            }
        }
        else
            return TRUE;
    }

    function cnpj_validacao($cnpj){
        $this->form_validation->set_message('cnpj_validacao', 'Digite um CNPJ Valido.');
        if (strlen($cnpj) <> 18) return FALSE;
        $soma1 = ($cnpj[0] * 5) +

        ($cnpj[1] * 4) +
        ($cnpj[3] * 3) +
        ($cnpj[4] * 2) +
        ($cnpj[5] * 9) +
        ($cnpj[7] * 8) +
        ($cnpj[8] * 7) +
        ($cnpj[9] * 6) +
        ($cnpj[11] * 5) +
        ($cnpj[12] * 4) +
        ($cnpj[13] * 3) +
        ($cnpj[14] * 2);
        $resto = $soma1 % 11;
        $digito1 = $resto < 2 ? 0 : 11 - $resto;
        $soma2 = ($cnpj[0] * 6) +

        ($cnpj[1] * 5) +
        ($cnpj[3] * 4) +
        ($cnpj[4] * 3) +
        ($cnpj[5] * 2) +
        ($cnpj[7] * 9) +
        ($cnpj[8] * 8) +
        ($cnpj[9] * 7) +
        ($cnpj[11] * 6) +
        ($cnpj[12] * 5) +
        ($cnpj[13] * 4) +
        ($cnpj[14] * 3) +
        ($cnpj[16] * 2);
        $resto = $soma2 % 11;
        $digito2 = $resto < 2 ? 0 : 11 - $resto;
        if (($cnpj[16] == $digito1) && ($cnpj[17] == $digito2))
            return TRUE;
        else{
            return FALSE;
        }
    }


    function cpf_validacao($cpf) {
        $cpf = str_replace(".", "", $cpf);
        $cpf = str_replace("-", "", $cpf);
    // verifica se e numerico
        $this->form_validation->set_message('cpf_validacao', 'Digite um CPF Valido.');
        if(!is_numeric($cpf)) {
            return false;
        }

        // verifica se esta usando a repeticao de um numero
        if( ($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || ($cpf == '44444444444') || ($cpf == '55555555555') || ($cpf == '66666666666') || ($cpf == '77777777777') || ($cpf == '88888888888') || ($cpf == '99999999999') || ($cpf == '00000000000') ) {
        return false;
        }

        //PEGA O DIGITO VERIFIACADOR
        $dv_informado = substr($cpf, 9,2);

        for($i=0; $i<=8; $i++) {
            $digito[$i] = substr($cpf, $i,1);
        }

        //CALCULA O VALOR DO 10º DIGITO DE VERIFICAÇÂO
        $posicao = 10;
        $soma = 0;

        for($i=0; $i<=8; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[9] = $soma % 11;

        if($digito[9] < 2) {
            $digito[9] = 0;
        } else {
            $digito[9] = 11 - $digito[9];
        }

        //CALCULA O VALOR DO 11º DIGITO DE VERIFICAÇÃO
        $posicao = 11;
        $soma = 0;

        for ($i=0; $i<=9; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[10] = $soma % 11;

        if ($digito[10] < 2) {
            $digito[10] = 0;
        }
        else {
            $digito[10] = 11 - $digito[10];
        }

        //VERIFICA SE O DV CALCULADO É IGUAL AO INFORMADO
        $dv = $digito[9] * 10 + $digito[10];
        if ($dv != $dv_informado) {
            return false;
        }

            return true;
    }

}